package be.ipl.finito.usecases;

import javax.ejb.Remote;

import be.ipl.finito.domaine.Joueur;
import be.ipl.finito.exceptions.ArgumentInvalideException;
import be.ipl.finito.exceptions.JoueurExistantException;
import be.ipl.finito.exceptions.MotDePasseException;

@Remote
public interface GestionJoueur{
	/**
	 * Recherche et renvoie un joueur ayant le pseudo pass� en param�tre
	 * 
	 * @param pseudo
	 *            Pseudo du joueur recherch�
	 * @return Joueur recherch�
	 * @throws ArgumentInvalideException
	 */
	Joueur chercherJoueur(String pseudo) throws IllegalArgumentException;
	/**
	 * Enregsitre le joueur dans le systeme.
	 * 
	 * @param pseudo
	 *            Pseudo du joueur
	 * @param motDePasse
	 *            Mot de passe du joueur
	 * @param nom
	 *            nom du joueur
	 * @param prenom
	 *            prenom du joueur
	 * @param email 
	 *            email
	 * @return Joueur enregistr�. renvoie Null si un joueur du meme nom est pr�sent dans
	 *         le systeme
	 * @throws ArgumentInvalideException
	 */
	Joueur sInscrire(String pseudo, String motDePasse, String motDePasseConfirm, String nom, String prenom, String email)throws IllegalArgumentException, MotDePasseException, JoueurExistantException;
	/**
	 * Charge le plateau du joueur.
	 * 
	 * @param joueur
	 *            Joueur dont on souhaite charger le plateau
	 * @return Joueur dont on souhaite charger le plateau
	 * @throws ArgumentInvalideException
	 */
	Joueur chargerPlateau(Joueur joueur) throws IllegalArgumentException;
	
	Joueur seConnecter(String pseudo, String mdp) throws IllegalArgumentException;
}
